<?php

// Генератор url
// метод url() возвращает url по пути, дополнительным переменным и базовому адресу
/**
 * Класс генерации url внутри текущего branch
 * @author
 */
class switch_urlmaker
{
	// Параметры генерации url
	// Переменные, добавляемые ко всем генерируемым ссылкам дополнительно
	private $addvars = array();
	// Тип ссылок (get,pathinfo,virtual)
	private $urltype = null;
	// Имя переменной по умолчанию
	private $urlvar = null;
	// Базовый url
	private $baseurl=null;
	// Конструктор
	function __construct($urltype='get',$urlvar='s',$baseurl=null)
	{
		// Делаем установки по умолчанию
		$this->setroot($urltype,$urlvar,$baseurl);
	}
	// Установка корневых параметров
	function setroot($urltype='get',$urlvar='s',$baseurl=null)
	{
		//
		$this->urltype = $urltype;
		$this->urlvar = $urlvar;
		$this->baseurl = $baseurl;
	}
	// Добавить к url переменную
	function addvars($vars)
	{
		if (!is_array($vars)){return false;}
		$this->addvars = array_merge($this->addvars,$vars);
		return true;
	}
	// Добавить к url путь
	function addpath($urlvar,$path)
	{
		if (empty($urlvar) OR empty($path)){return false;}
		$this->addvars[$urlvar] = switch_makepath($path);
		return true;
	}
	// Вернуть потомка
	function suburlmaker($urlvar,$ppath)
	{
		// Определяем путь наследуемого пути
		if (empty($urlvar))
		{
			$urltype='virtual';
		}else
		{
			$urltype='get';
		}
		// Создаем экземпляр 
		$urlmaker = clone $this;
		// Наследуется базовый url родителя
		if ('pathinfo'==$this->urltype)
		{
			// Получаем базовый url
			$baseurl = $this->url($ppath);
		}else
		{
			// Берем базовый путь от родитеря
			$baseurl = $this->baseurl;
			// Добавляем путь родителя
			$urlmaker->addpath($this->urlvar,$ppath);
		}
		// Устанавливаем основные параметры нового генератора url
		$urlmaker->setroot($urltype,$urlvar,$baseurl);
		return $urlmaker;
	}
	// Вернуть url
	function url($path,$addvars=null)
	{
		// Сливаем новые дополнительные переменные, с предустановленными
		if (!is_array($addvars)){$addvars=array();}
		$addvars  = array_merge($this->addvars,$addvars);
		
		return switch_makeurl($path,$this->urltype,$this->urlvar,
						$addvars ,$this->baseurl);
	}
	// Параметры
	function urltype()
	{
		return $this->urltype;
	}
	function urlvar()
	{
		return $this->urlvar;
	}
}

// Обрабатывает путь, приводя его в формат строки и убирая начальный слеш 
function switch_makepath($path)
{
	$flag_addemptyend = false;
	if (is_array($path))
	{
		// Избавляемся от пустых элементов, кроме последнего
		if (!end($path)){$flag_addemptyend=true;}
		$path =  array_filter($path, "switch_util_nonull");
		if ($flag_addemptyend){$path[]=null;}
		// Объединяем элементы в массив
		return implode('/',$path);
	}else
	{
		if ('/'==substr($path,0,1))
		{
			// Ссылка не должна начинаться со слеша
			$path = substr($path,1);
		}
		return $path;
	}
}
/**
 * Возвращает URL внутри модуля switch
 * @param $path - текущий путь
 * @param $urltype - тип текущей ссылки
 * @param $urlvar - переменная для текущей get-ссылки
 * @param $addvars - дополнительные переменные get
 * @param $baseurl - базовый url модуля switch
 * @return string
 */
function switch_makeurl($path,$urltype='get',$urlvar='s',
						$addvars=null,$baseurl=null)
{
	// Генерирует url для модуля switch
	
	// Базовый url
	if (empty($baseurl))
	{
		$baseurl = mst_url('SHELL/switch');
	}
	
	// Обрабатываем основную ссылку
	$path = switch_makepath($path);

	// Применяем основной путь
	if ($urltype == 'pathinfo')
	{
		$baseurl .= $path;
	}elseif($urltype == 'get')
	{
		//
		$addvars[$urlvar]=$path;
	}else
	{
		// Ошибка
		mst_error("Неправильный тип ссылки",
				"Тип ссылки {$urltype} не поддерживается",1);
	}
	// echo $baseurl;
	// Возвращаем URL
	return mst_util_addurlvar($baseurl,$addvars);
}
?>